﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DataBaseLibrary.DBInterfaces
{
    public interface IDBProvider
    {
        /// <summary>
        /// Устанавливает соединение с БД
        /// </summary>
        /// <returns>Состояние соединения. false - ошибка</returns>
        bool Connect();

        /// <summary>
        /// Сохраняет объект в БД
        /// </summary>
        /// <param name="object_db">Объект типа IDBObject</param>
        /// <returns>Возвращает ID добавленной записи</returns>
        object Save(IDBObject object_db);

        /// <summary>
        /// Считывает объект из БД. 
        /// </summary>
        /// <param name="object_db">Объект, который необходимо считать</param>
        /// <param name="ID">Идентификатор записи в БД</param>
        void Load(IDBObject object_db, object ID);

        /// <summary>
        /// Обновить запись в БД
        /// </summary>
        /// <param name="object_db">Новый объект изменённый. Перед изменением этот объект должен уже существовать (сохранён или считан из БД), иначе будет ошибка: Неизвестный  идентификатор</param>
        void Update(IDBObject object_db);

        /// <summary>
        /// Выполнение SQL запросов Select БД для бизнес-логики
        /// </summary>
        /// <param name="query">SQL запрос</param>
        /// <returns></returns>
        List<object[]> ExecQueryRead(string query);

        /// <summary>
        /// Выполнение SQL запросов DML БД для бизнес-логики
        /// </summary>
        /// <param name="query">SQL запрос</param>
        /// <returns></returns>
       void ExecQueryDml(string query);

        /// <summary>
        /// Закрывает соединение с БД
        /// </summary>
        void CloseConnect();
    }
}
